home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / etc / bash_completion.d / mutt < prev    next >
Encoding:
Text File  |  2010-11-16  |  4.4 KB  |  183 lines

  1. # mutt completion
  2. #
  3. # Mutt doesn't have an "addressbook" like Pine, but it has aliases and
  4. # a "query" function to retrieve addresses, so that's what we use here.
  5.  
  6. have mutt || have muttng && {
  7.  
  8. # @param $1 (cur) Current word to complete
  9. _muttaddr()
  10. {
  11.     _muttaliases "$1"
  12.     _muttquery "$1"
  13.  
  14.     COMPREPLY=( "${COMPREPLY[@]}" $( compgen -u -- "$1" ) )
  15.  
  16.     return 0
  17. } # _muttaddr()
  18.  
  19.  
  20. # Find muttrc to use
  21. # @output  muttrc filename
  22. _muttrc()
  23. {
  24.     # Search COMP_WORDS for '-F muttrc' or '-Fmuttrc' argument
  25.     set -- "${COMP_WORDS[@]}"
  26.     while [ $# -gt 0 ]; do
  27.         if [ "${1:0:2}" = -F ]; then
  28.             if [ ${#1} -gt 2 ]; then
  29.                 muttrc="$(dequote "${1:2}")"
  30.             else
  31.                 shift
  32.                 [ "$1" ] && muttrc="$(dequote "$1")"
  33.             fi
  34.             break
  35.         fi
  36.         shift
  37.     done
  38.  
  39.     if [ -z "$muttrc" ]; then
  40.         [ -f ~/.${muttcmd}/${muttcmd}rc ] && muttrc="~/.${muttcmd}/${muttcmd}rc"
  41.         [ -f ~/.${muttcmd}rc ] && muttrc="~/.${muttcmd}rc"
  42.     fi
  43.     printf "%s" "$muttrc"
  44. } # _muttrc()
  45.  
  46.  
  47. # Recursively build list of sourced config files
  48. # @param $1  List of config files found so far
  49. # @param $2  Config file to process
  50. # @output  List of config files
  51. _muttconffiles()
  52. {
  53.     local file sofar
  54.     local -a newconffiles
  55.  
  56.     sofar=" $1 "
  57.     shift
  58.     while [[ "$1" ]]; do
  59.         newconffiles=( $(sed -n 's|^source[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' $(eval echo $1) ) )
  60.         for file in "${newconffiles[@]}"; do
  61.             [[ ! "$file" ]] || [[ "${sofar/ ${file} / }" != "$sofar" ]] &&
  62.                 continue
  63.             sofar="$sofar $file"
  64.             sofar=" $(eval _muttconffiles \"$sofar\" $file) "
  65.         done
  66.         shift
  67.     done
  68.     printf '%s\n' $sofar
  69. } # _muttconffiles()
  70.  
  71.  
  72. # @param $1 (cur) Current word to complete
  73. _muttaliases()
  74. {
  75.     local cur=$1 muttrc muttcmd=${COMP_WORDS[0]}
  76.     local -a conffiles aliases
  77.  
  78.     muttrc=$(_muttrc)
  79.     [ -z "$muttrc" ] && return 0
  80.  
  81.     conffiles=( $(eval _muttconffiles $muttrc $muttrc) )
  82.     aliases=( $( sed -n 's|^alias[[:space:]]\{1,\}\([^[:space:]]\{1,\}\).*$|\1|p' \
  83.         $(eval echo "${conffiles[@]}") ) )
  84.     COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "${aliases[*]}" -- "$cur" ) )
  85.  
  86.     return 0
  87. }
  88.  
  89.  
  90. # @param $1 (cur) Current word to complete
  91. _muttquery()
  92. {
  93.     local cur=$1 querycmd muttcmd=${COMP_WORDS[0]}
  94.     local -a queryresults
  95.  
  96.     querycmd="$( $muttcmd -Q query_command | sed -e 's|^query_command=\"\(.*\)\"$|\1|' -e 's|%s|'$cur'|' )"
  97.     if [[ -z "$cur" || -z "$querycmd" ]]; then
  98.         queryresults=()
  99.     else
  100.         queryresults=( $( $querycmd | \
  101.             sed -n '2,$s|^\([^[:space:]]\{1,\}\).*|\1|p' ) )
  102.     fi
  103.  
  104.     COMPREPLY=( "${COMPREPLY[@]}" $( compgen -W "${queryresults[*]}" \
  105.         -- "$cur" ) )
  106.  
  107.     return 0
  108. }
  109.  
  110.  
  111. # @param $1 (cur) Current word to complete
  112. _muttfiledir()
  113. {
  114.     local cur=$1 folder muttrc spoolfile muttcmd=${COMP_WORDS[0]}
  115.  
  116.     muttrc=$(_muttrc)
  117.     if [[ $cur == [=+]* ]]; then
  118.         folder="$( $muttcmd -F "$muttrc" -Q folder | sed -e 's|^folder=\"\(.*\)\"$|\1|' )"
  119.         : folder:=~/Mail
  120.  
  121.         # Match any file in $folder beginning with $cur
  122.         # (minus the leading '=' sign).
  123.         COMPREPLY=( $( compgen -f -- "$folder/${cur:1}" ) )
  124.         COMPREPLY=( ${COMPREPLY[@]#$folder/} )
  125.         return 0
  126.     elif [ "$cur" == !* ]; then
  127.         spoolfile="$( $muttcmd -F "$muttrc" -Q spoolfile | \
  128.             sed -e 's|^spoolfile=\"\(.*\)\"$|\1|' )"
  129.         [ ! -z "$spoolfile" ] && eval cur="${cur/^!/$spoolfile}";
  130.     fi
  131.     _filedir
  132.  
  133.     return 0
  134. } # _muttfiledir
  135.  
  136.  
  137. _mutt()
  138. {
  139.     local cur prev
  140.     _get_comp_words_by_ref -n =+! cur prev
  141.     #cur=`_get_cword =+!`
  142.     #prev=`_get_pword =+!`
  143.  
  144.     COMPREPLY=()
  145.  
  146.     case $cur in
  147.     -*)
  148.         COMPREPLY=( $( compgen -W '-A -a -b -c -e -f -F -H -i -m -n \
  149.             -p -Q -R -s -v -x -y -z -Z -h' -- "$cur" ) )
  150.         return 0
  151.         ;;
  152.     *)
  153.         case $prev in
  154.         -a|-f|-F|-H|-i)
  155.             _muttfiledir "$cur"
  156.             return 0
  157.             ;;
  158.         -A)
  159.             _muttaliases "$cur"
  160.             return 0
  161.             ;;
  162.         -e|-m|-Q|-s|-h|-p|-R|-v|-y|-z|-Z)
  163.             return 0
  164.             ;;
  165.         *)
  166.             _muttaddr "$cur"
  167.             return 0
  168.             ;;
  169.         esac
  170.         ;;
  171.     esac
  172. } # _mutt()
  173. complete -F _mutt -o default -o filenames mutt muttng
  174. } # have mutt
  175.  
  176. # Local variables:
  177. # mode: shell-script
  178. # sh-basic-offset: 4
  179. # sh-indent-comment: t
  180. # indent-tabs-mode: nil
  181. # End:
  182. # ex: ts=4 sw=4 et filetype=sh
  183.